經過前幾天閱讀了幾個咒語規範,相信大家都有注意到一些看不太懂但被我草草帶過的地方吧!今天就放鬆一下來稍微探討一下規範中那些藍藍的東西吧!但太過深入會沒完沒了且離題太多,所以我會盡量適可而止。
來看看是前幾天看過的 寐偲,摳賽 的說明書:
首先了簡單表明了這個函式的目的:「這個函式回傳一個x
的 cos 值,引數以弧度表示。」
接著呼叫他時執行以下步驟:
n
,值為ToNumber(x)
n
不是有限,回傳NaN
n
是+0
或-0
,回傳1
cos(ℝ(n))
的近似值那第一步的ToNumber(x)
是什麼呢??
ToNumber
是一個抽象操作(abstract operation),他如果正常執行,就會將argument
轉為數字並回傳;如果途中發生錯誤,將丟出錯誤,就無法成功回傳一個數字。
ToNumber
是一個抽象操作??那又是啥?
這些抽象操作不是ECMAScript語言的一部份,定義這些抽象操作是為了更清楚的表達ECMAScript語言的語意,後面還有對於抽象操作更詳細的描述,我們進去看看吧!
為了讓這些操作在規範中廣泛使用,這些抽象操作(或演算法)會設計成函式然後放入參數的型式,這樣就能在其他地方透過名字來引用它,像是OperationName(arg1, arg2)
;有些則是會設計得像 class 中的方法:someValue.OperationName(arg1, arg2)
。
理解抽象操作之後,我們就能清楚的了解這些長得像函式的東西其實不是函式,但如此設計增加了ECMAScript的可讀性。透過這些抽象操作的名稱,我們可以較容易的得知他想達成的目的;而內部細節的演算法可以讓我們在操作 JavaScript 時碰到一些無法理解的狀況時去查閱,就會知道究竟發生什麼才導致我們遇到的結果。
參考資料: